﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using ERP_RORZE_DLL.Product.database;
using ERP_RORZE_DLL.Product.DAO;
using System.Text.RegularExpressions;
using ERP_RORZE_PERMISSION.Base;

namespace ERP_RORZE_PRODUCT.Product.PartHandling
{
    public partial class frm_InspF3Input : DevExpress.XtraEditors.XtraForm
    {
        public event EventHandler Reload;
        ClsDInspF3Table obj = new ClsDInspF3Table();
        ClsPartHandlingDAO clsParthandinhDAO = new ClsPartHandlingDAO();
        private LogUtils log;
        DataTable dt;

        public frm_InspF3Input()
        {
            InitializeComponent();
            log = new LogUtils();
        }

        private void frm_InspF3Input_Load(object sender, EventArgs e)
        {
            //lấy danh sách MONo cho vào combo
            dt = clsParthandinhDAO.GetlAllMONo();
            List<ClsMOTable> objs = new List<ClsMOTable>();
            foreach (DataRow r in dt.Rows)
            {
                ClsMOTable obj = new ClsMOTable();
                obj.MONo = r["MONo"].ToString();  //
                obj.PartID = r["PartID"].ToString();  //
                obj.MOQty = int.Parse(r["MOQty"].ToString());   ////
                obj.DeadLine = (DateTime)r["Deadline"];
                objs.Add(obj);
            }

            cbMONo.DataSource = objs;
            cbMONo.DisplayMember = "MONo";
            cbMONo.ValueMember = "MONo";

            //lấy danh sách StaffID cho vào combo
            dt = clsParthandinhDAO.GetlAllStaffID();
            cbStaffID.DataSource = dt;
            cbStaffID.DisplayMember = "StaffID";
            cbStaffID.ValueMember = "StaffID";
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            int intOK = 0;
            int intNG = 0;
            dt = clsParthandinhDAO.GetInspHandMO(cbMONo.SelectedValue.ToString());
            foreach (DataRow r in dt.Rows)
            {
                intOK = intOK + int.Parse(r["InspOK"].ToString());
                intNG = intNG + int.Parse(r["InspNG"].ToString());
            }
            if (IsNumber(txtNGQty.Text) == false)
            {
                MessageBox.Show("NGQty phải là kiểu số");
            }
            else if (IsNumber(txtOKQty.Text) == false)
            {
                MessageBox.Show("OKQty phải là kiểu số");
            }
            else if (IsNumber(txtSPQty.Text) == false)
            {
                MessageBox.Show("SPOK phải là kiểu số");
            }
            else if (int.Parse(txtOKQty.Text) < 0)
            {
                MessageBox.Show("OKQty phải lớn hơn 0");
            }
            else if (int.Parse(txtNGQty.Text) < 0)
            {
                MessageBox.Show("NGQty phải lớn hơn 0");
            }
            else if (int.Parse(txtSPQty.Text) < 0)
            {
                MessageBox.Show("SPOK phải lớn hơn 0");
            }
            else if (int.Parse(txtSPQty.Text) + int.Parse(txtOKQty.Text) + int.Parse(txtNGQty.Text) > int.Parse(txtMOQty.Text))
            {
                MessageBox.Show("Số lượng của MO này chỉ là: "+ txtMOQty.Text);
            }
            else if (int.Parse(txtNGQty.Text) > intNG)
            {
                MessageBox.Show("Số lượng NG chỉa còn là: "+intNG +". Hãy kiểm tra lại số lượng giao nhận");
            }
            else if (int.Parse(txtOKQty.Text) > intOK)
            {
                MessageBox.Show("Số lượng Ok là "+intOK+". Hãy kiểm tra lại số lượng giao nhận");
            }
            else if (int.Parse(txtOKQty.Text) + int.Parse(txtSPQty.Text) > intOK)
            {
                MessageBox.Show("Số lượng Ok là " + intOK + ". Hãy kiểm tra lại số lượng giao nhận");
            }
            else if (int.Parse(txtSPQty.Text) == 0 && int.Parse(txtOKQty.Text) == 0 && int.Parse(txtNGQty.Text) == 0)
            {
                MessageBox.Show("SP,NG,OK không thể đồng thời bằng 0");
            }
            else
            {
                //try
                //{
                obj.Date = dateDate.Value;
                obj.MONo = cbMONo.SelectedValue.ToString(); ;
                obj.StaffID = cbStaffID.Text;
                obj.Finished = checkFinished.Checked;
                obj.F3NGQty = int.Parse(txtNGQty.Text);
                obj.F3OKQty = int.Parse(txtOKQty.Text);
                obj.F3SPQty = int.Parse(txtSPQty.Text);
                obj.Note = txtNote.Text;
                clsParthandinhDAO.InsertInspF3Detail(obj);

                //write Log
                log.Table = LogConstant.Table.Product.Insp_F3;
                log.Task = LogConstant.Task.Insert;
                log.Description = "MONo: " + obj.MONo + "; Date: " + obj.Date;
                log.WriteLog();

                MessageBox.Show("Đã nhập xong");
                //Reload(sender, e);
                cbMONo.Text = "";
                txtMOQty.Text = "";
                txtNGQty.Text = "";
                txtOKQty.Text = "";
                txtPartID.Text = "";
                txtDeadline.Text = "";
                txtNote.Text = "";
                cbMONo.Focus();
                //}
                //catch
                //{
                //    MessageBox.Show("NGQty, OKQty, SPQty phải là kiểu số");
                //}
            }
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void cbMONo_SelectedValueChanged(object sender, EventArgs e)
        {
            ClsMOTable obj = ((ClsMOTable)cbMONo.SelectedItem);
            txtMOQty.Text = obj.MOQty.ToString();
            txtDeadline.Text = obj.DeadLine.ToString();
            txtPartID.Text = obj.PartID.ToString();
        }
        public bool IsNumber(string pText)
        {
            Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
            return regex.IsMatch(pText);
        }
        protected override bool ProcessKeyPreview(ref Message m)
        {
            if (m.Msg == 0x0100 && (int)m.WParam == 13)
            {
                this.ProcessTabKey(true);
            }
            return base.ProcessKeyPreview(ref m);
        }
    }
}